<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>修改原型链</title>
	<link rel="stylesheet" href="">
</head>
<body>
	
</body>
<script>
	
	/* 总体的模型

		arr -> * myArray -> Array -> object...

		myArray时我自己添加的原型链，目的使arr经过我的一次处理，然后不影响其他的数据
	*/


	function myArray(){
	};
	myArray.prototype.__proto__ = Array.prototype;	// 修改原型链为Array
	myArray.prototype.push = function() {
		let arg = Array.from(this.push.arguments);
		[].push.apply(this, arg);
		console.log('我对push方法进行了拦截');
	}

	let arr = [1, 2, 3];
	arr.__proto__ = myArray.prototype;	// 修改arr的原型链为myArray


	/* 总结

		1. 原型链的指向可以被修改，也就是说我们可以将某一个实例的对象的方法进行拦截

		2. 存在的问题
			-1 会让实例的原型链发生混乱，脱离标准的原型链。
	*/


</script>
</html>